package com.ybbase.framework.common.util;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * 文件操作工具类
 *
 * @author shenaiguo
 * @date 2019-08-29
 * @since 4.0
 */
public class FileUtil {

    private static final String PHOTOSUFFIX = "jpg,jpeg,png";
    private static final String VIDEOSUFFIX = "mp4,rmvb,mov,wmv,avi,3gp,flv,amv";


    /**
     * 功能描述 :判断文件类型
     *
     * @param fileSuffix 文件路径
     * @return boolean
     */
    public static String getFileType(String fileSuffix) {
        if (fileSuffix == null) {
            return "file";
        }
        return PHOTOSUFFIX.contains(fileSuffix) ? "photo" : VIDEOSUFFIX.contains(fileSuffix) ? "video" : "file";
    }

    public static void main(String[] args) {
        System.out.println(getFileType(null));
    }

    /**
     * 功能描述 :判断文件类型代码
     *
     * @param type 文件类型 0图片1文件2视频9其他
     * @return boolean
     */
    public static Short getFileTypeCode(String type) {
        int result = "photo".equals(type) ? 0 : "video".equals(type) ? 1 : "file".equals(type) ? 2 : 9;
        return (short) result;
    }

    /**
     * 功能描述：创建单个文件夹或者是多个嵌套的文件夹
     *
     * @param destFileName 文件路径
     * @return boolean
     */
    public static boolean createFile(String destFileName) {
        File file = new File(destFileName);
        if (file.exists()) {
            return false;
        }
        if (!file.getParentFile().exists()) {
            if (!file.getParentFile().mkdirs()) {
                return false;
            }
        }

        // 创建目标文件
        try {
            if (file.createNewFile()) {

                return true;
            } else {
                return false;
            }
        } catch (IOException e) {

            return false;
        }
    }


    /**
     * 删除文件
     *
     * @param filePathAndName String 文件路径及名称 如c:/fqf.txt
     */
    public static boolean delFile(String filePathAndName) {
        File myDelFile = new File(filePathAndName);
        return myDelFile.delete();
    }


    /**
     * 上传文件方法
     *
     * @param file    文件
     * @param fileUrl 文件路径
     * @return 文件完整路径
     */
    public static String uploadMultipartFile(MultipartFile file, String fileUrl) throws Exception {
        return uploadMultipartFile(file, fileUrl, null);
    }

    /**
     * 上传文件方法
     *
     * @param file    文件
     * @param fileUrl 文件路径
     * @param rename  文件名字
     * @return 文件完整路径
     */
    public static String uploadMultipartFile(MultipartFile file, String fileUrl, String rename) throws Exception {
        //如果目录不存在，自动创建文件夹
        File dir = new File(fileUrl);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        return executeUpload(file, fileUrl, rename == null ? UUID.randomUUID().toString() : rename);
    }

    /**
     * 上传文件方法
     *
     * @param file    文件
     * @param fileUrl 文件路径
     * @return 文件完整路径
     */
    public static List<String> uploadsMultipartFile(MultipartFile[] file, String fileUrl) throws Exception {
        List<String> list = new ArrayList<String>();
        File dir = new File(fileUrl);
        if (!dir.exists()) {
            Boolean b = dir.mkdirs();
        }
        //遍历文件数组执行上传
        for (int i = 0; i < file.length; i++) {
            if (file[i] != null) {
                //调用上传方法
                String string = executeUpload(file[i], fileUrl, UUID.randomUUID().toString());
                list.add(string);
            }
        }
        return list;
    }

    /**
     * 提取上传方法为公共方法
     *
     * @param file     文件
     * @param fileUrl  文件路径
     * @param fileName 文件名
     * @throws Exception
     */
    private static String executeUpload(MultipartFile file, String fileUrl, String fileName) throws Exception {

        //文件后缀名
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        String filefullName = fileName + suffix;
        //上传文件名
        File serverFile = new File(fileUrl + filefullName);
        System.out.println(serverFile.getParent());
        //将上传的文件写入到服务器端文件内
        file.transferTo(serverFile);
        return fileUrl + filefullName;

    }


}
